package com.yiboshi.rehrs.util;

import java.util.Random;

public class ImeiGenerator {

    // 生成随机IMEI（15位，含Luhn校验码）
    public static String generateImei() {
        Random random = new Random();
        // 生成前14位（首数字不能为0）
        StringBuilder imeiBuilder = new StringBuilder()
                .append(random.nextInt(9) + 1); // 第一位 1-9

        for (int i = 0; i < 13; i++) {
            imeiBuilder.append(random.nextInt(10)); // 后续13位 0-9
        }

        String imeiBase = imeiBuilder.toString();
        char checkDigit = calculateLuhnCheckDigit(imeiBase);
        return imeiBase + checkDigit;
    }

    // 计算Luhn校验码
    private static char calculateLuhnCheckDigit(String number) {
        int sum = 0;
        boolean alternate = false;

        // 从右往左遍历（实际从倒数第二位开始）
        for (int i = number.length() - 1; i >= 0; i--) {
            int digit = Character.getNumericValue(number.charAt(i));
            if (alternate) {
                digit *= 2;
                if (digit > 9) {
                    digit = (digit % 10) + 1; // 或 digit -= 9
                }
            }
            sum += digit;
            alternate = !alternate;
        }

        int mod = sum % 10;
        return (mod == 0) ? '0' : (char) (10 - mod + '0');
    }

    // 测试
    public static void main(String[] args) {
       String  imei ="862333060359801";
        System.out.println(isValidImei(imei));
    }

    // 校验IMEI有效性（可选）
    public static boolean isValidImei(String imei) {
        if (imei == null || imei.length() != 15 || !imei.matches("\\d+")) {
            return false;
        }
        String base = imei.substring(0, 14);
        char expectedCheckDigit = calculateLuhnCheckDigit(base);
        return imei.charAt(14) == expectedCheckDigit;
    }
}